Computer hardware such as an electronic circuit can include thousands or even millions of tiny components. Designing computer hardware at the level of these tiny components is time-consuming and costly. Therefore, hardware designers often use design tools to simplify and speed up the process of designing computer hardware.
When using a design tool, a designer specifies a design unit in a way that abstracts away certain hardware details. For example, the designer might specify the overall behavior, timing, and structure of the design unit, while ignoring the actual low-level hardware components of the design unit. The design tool then transforms the higher-level specification into a lower-level specification that is closer to an actual hardware implementation. By shielding the designer from many of the complexities of the design unit, the design tool makes the design process shorter and more cost effective.
A design tool typically accepts a specification written in a hardware description language [“HDL”] such as VHDL or VERILOG®. A HDL is a language for specifying computer hardware. Most HDLs include specialized constructs and libraries that the designer uses to explicitly specify timing and structural details. Different design tools and HDLs work at different levels of abstraction. For example, behavioral synthesis tools and behavioral HDLs work at a relatively high level of abstraction. Even at a relatively high level of abstraction, however, the syntax of HDLs is awkward and using HDLs requires extensive training. For additional information about electronic design automation, behavioral synthesis tools, and HDLs, see John. P. Elliott, Understanding Behavioral Synthesis, Kluwer Academic Publishers (1999).
Because HDLs are awkward and hard to learn, there is great interest in alternative design approaches that accept specifications as conceived by designers.
Designers are often familiar with a software programming language such as C or C++. To test the algorithmic behavior of a design unit, a designer might code a system-level specification for the design unit using a programming language. Converting the system-level specification into a HDL specification can be problematic, however. The system-level specification typically exists at a higher level of abstraction than the HDL specification and does not require or include details specifying hardware structure and concurrency. Moreover, the system-level specification can include software constructs (for example, pointers) that are difficult to translate to a hardware counterpart.
One way to overcome these difficulties is to make a programming language more HDL-like. For example, some design approaches start with a programming language such as C, and then add support libraries or impose HDL-like conventions, classes, and syntax on the programming language. Rather than simplify system design, these design approaches in effect force the designer to learn another HDL.
U.S. Pat. No. 6,226,776 [“the '776 patent”] describes another programming language design approach. The '776 patent describes specification of a design unit in a standard programming language (for example, ANSI C) without the use of specialized constructs and additional libraries. The '776 patent does not, however, describe an adequate way for a designer to include structurally meaningful organization in a programming language specification at the same time.
Thus, current programming language design approaches fail to realize the potential of a programming language approach to system design.